package com.huahua.api.service.entertainment.impl;

import com.huahua.api.entity.dto.DmxApiContent;
import com.huahua.api.entity.dto.DmxApiMessageV2;
import com.huahua.api.entity.dto.DmxApiRequestV2;
import com.huahua.api.entity.entertainment.param.JobWorthAnalysisParam;
import com.huahua.api.exception.CommonException;
import com.huahua.api.service.DmxApiService;
import com.huahua.api.service.entertainment.JobWorthService;
import com.huahua.api.util.CheckUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;

import java.util.ArrayList;
import java.util.List;

/**
 * 工作价值评估服务实现类
 *
 * @author Huahua-Ai
 * @date 2025-01-22 10:35:00
 * @description 提供工作价值评估AI分析功能，对前端传递的评估结果进行AI总结和建议生成
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class JobWorthServiceImpl implements JobWorthService {

    private final DmxApiService dmxApiService;

    /**
     * AI分析工作评估结果
     *
     * @param param 包含评估结果文本的参数
     * @return AI分析报告内容流（总结 + 未来建议）
     */
    @Override
    public Flux<String> analyzeJobEvaluation(JobWorthAnalysisParam param) {
        log.info("开始AI分析工作评估结果");

        // 参数校验
        CheckUtil.checkNotNull(param, new CommonException("参数不能为空"));
        CheckUtil.checkTrue(StrUtil.isNotBlank(param.getEvaluationText()),
                new CommonException("评估结果文本不能为空"));

        // 构建AI提示词
        String systemPrompt = buildSystemPrompt();
        String userPrompt = buildUserPrompt(param.getEvaluationText());

        // 构建消息列表
        List<DmxApiMessageV2> messages = new ArrayList<>();

        // 系统消息
        messages.add(DmxApiMessageV2.builder()
                .role("system")
                .content(List.of(DmxApiContent.builder()
                        .type("text")
                        .text(systemPrompt)
                        .build()))
                .build());

        // 用户消息
        messages.add(DmxApiMessageV2.builder()
                .role("user")
                .content(List.of(DmxApiContent.builder()
                        .type("text")
                        .text(userPrompt)
                        .build()))
                .build());

        // 构建请求
        DmxApiRequestV2 request = DmxApiRequestV2.builder()
                .model("DMXAPI-HuoShan-DeepSeek-V3")
                .messages(messages)
                .temperature(0.3)
                .stream(true)
                .build();

        // 调用AI服务
        return dmxApiService.chatCompletions(request)
                .onErrorResume(error -> {
                    log.error("AI分析工作评估失败", error);
                    return Flux.just("生成分析报告时发生错误：" + error.getMessage());
                });
    }

    /**
     * 构建系统提示词
     */
    private String buildSystemPrompt() {
        return "你是一位资深的职业发展顾问和人力资源专家，具有丰富的行业经验和深刻的市场洞察力。" +
                "你的专长包括：\n" +
                "1. 工作价值评估和薪酬分析\n" +
                "2. 职业发展规划和路径设计\n" +
                "3. 行业趋势分析和市场预测\n" +
                "4. 个人能力提升建议\n" +
                "5. 工作生活平衡优化\n\n" +
                "你需要基于用户提供的工作评估结果，提供专业、实用且具有前瞻性的分析和建议。" +
                "请用温和但专业的语气，结合当前就业市场环境、AI时代发展趋势、远程办公普及等因素，" +
                "为用户提供有价值的职业指导。";
    }

    /**
     * 构建用户提示词
     */
    private String buildUserPrompt(String evaluationText) {

        String prompt = "请基于以下工作评估结果，为我提供一份深度的职业分析报告。\n\n" +
                "【工作评估结果】\n" +
                evaluationText +
                "\n\n" +
                "【分析要求】\n" +
                "请从以下几个维度进行分析，并提供具体的建议：\n\n" +
                "1. **综合评价总结**\n" +
                "   - 对这份工作的整体价值进行客观评价\n" +
                "   - 识别主要优势和劣势\n" +
                "   - 与当前市场标准进行对比\n\n" +
                "2. **核心问题诊断**\n" +
                "   - 指出影响工作价值的关键因素\n" +
                "   - 分析可能存在的潜在风险\n" +
                "   - 评估职业发展的瓶颈\n\n" +
                "3. **未来发展建议**\n" +
                "   - 结合AI时代和数字化转型趋势，提供技能提升建议\n" +
                "   - 基于当前工作情况，规划短期（1年内）和中期（3-5年）职业目标\n" +
                "   - 推荐具体的行动计划和改进措施\n" +
                "   - 如何在现有岗位上最大化个人价值\n\n" +
                "4. **市场机会分析**\n" +
                "   - 基于当前技能和经验，分析适合的行业和岗位机会\n" +
                "   - 评估跳槽的时机和可行性\n" +
                "   - 提供薪资谈判和职业发展的策略建议\n\n" +
                "【输出要求】\n" +
                "- 报告长度：800-1200字\n" +
                "- 语言风格：专业而易懂，避免过于学术化的表达\n" +
                "- 结构清晰：使用标题和要点，便于阅读\n" +
                "- 建议具体：提供可操作的具体行动建议，避免空泛的建议\n" +
                "- 前瞻性强：结合行业发展趋势和未来就业环境变化";

        return prompt;
    }
}
